﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using SistemaDeBastanteodePoderes.Persistencia;
using NHibernate.Exceptions;
using SistemaDeBastanteodePoderes.Dominio;

namespace SistemaDeBastanteodePoderes.Negocio
{
    public class RepresentanteServiceImpl : IRepresentanteService
    {
        #region region de dependencias
        IRepresentanteDAO representanteDAO = null;
        ITipoDocumentoDAO tipoDocDAO = null;
        IClienteDAO clienteDAO = null;
        ITipoEmpresaDAO tipoEmpDAO = null;
        IBastanteoDAO bastanteoDAO = null;
        ITipoIntervencionDAO tipoIntDAO = null;
        IPoderDAO poderDAO = null;
        ITipoServicioDAO tipoSerDAO = null;
        #endregion


        #region Operaciones de negocio REGISTRAR CLIENTES
        public Representante RegistrarRepresentante(int COD_CLIENTE, int TIP_DOCUMENTO, string NUM_DOCUMENTO,
            string NOM_REPRESENTANTE, string APE_REPRESENTANTE, string DES_CARGO, string GRU_BASTANTEO)
        {
            // Excepción si falta algún dato requerido      
            if (COD_CLIENTE <= 0 || TIP_DOCUMENTO <= 0 || NUM_DOCUMENTO == null || NOM_REPRESENTANTE == null || 
                APE_REPRESENTANTE == null || DES_CARGO == null || GRU_BASTANTEO == null)
                throw new DatosInsuficientesException("Faltan datos para crear Representante");
            // Excepción si ya se registrón el mismo cliente (por su RUC)
            if (representanteDAO.ObtenerPorNuDoc(NUM_DOCUMENTO) != null)
                throw new EntidadRepetidaException("El Representante ya existe");
            // Creación del cliente
            Representante representanteACrear = new Representante();
            representanteACrear.Empresa = clienteDAO.Obtener(COD_CLIENTE);
            representanteACrear.TipDoc = tipoDocDAO.Obtener(TIP_DOCUMENTO);
            representanteACrear.NroDoc = NUM_DOCUMENTO;
            representanteACrear.Nombres = NOM_REPRESENTANTE;
            representanteACrear.Apellidos = APE_REPRESENTANTE;
            representanteACrear.Cargo = DES_CARGO;
            representanteACrear.GruBastanteo = GRU_BASTANTEO;
            return representanteDAO.Crear(representanteACrear);
        }
        #endregion



        #region LISTAR REPRESENTANTES
        public ICollection<Representante> ListarRepresentantes()
        {
            return representanteDAO.ListarTodos();
        }
        #endregion

        #region Métodos LISTAR Y  OBTENER TIPO REPRESENTANTE
        public Representante ObtenerRepresentante(int codigo)
        {
            return representanteDAO.Obtener(codigo);
        }
        #endregion

    }
}